package com.zhentao.dto;

import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;

import java.util.Date;
import java.util.List;

public class QueryConditionDto {
    
    private String queryType; // 查询类型：SUMMARY_QUERY, DATA_QUERY, RAW_DATA_QUERY
    
    // 基础查询条件
    private String importExportType; // 进出口类型：IMPORT, EXPORT
    private String customsArea; // 关区
    private String declareNo; // 申报号
    private String itemNo; // 项号
    private String hsCode; // HS编码
    private String goodsName; // 商品名称
    private String enterpriseName; // 企业名称
    private String enterpriseCode; // 企业代码
    private String enterpriseCreditLevel; // 企业信用等级
    private String countryCode; // 国别代码
    private String countryName; // 国别名称
    private String regionCode; // 地区代码
    private String regionName; // 地区名称
    private String portCode; // 口岸代码
    private String portName; // 口岸名称
    private String tradeMethod; // 贸易方式
    private String transportMode; // 运输方式
    
    // 时间范围
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
    private Date startDate; // 开始日期
    
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
    private Date endDate; // 结束日期
    
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
    private Date customsClearanceStartDate; // 通关开始日期
    
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
    private Date customsClearanceEndDate; // 通关结束日期
    
    // 分组和输出字段
    private List<String> groupDimensions; // 分组维度
    private List<String> outputFields; // 输出字段
    
    // 分页参数
    private Integer pageNum = 1; // 页码
    private Integer pageSize = 20; // 每页大小
    
    // 排序参数
    private String sortField; // 排序字段
    private String sortOrder; // 排序方向：ASC, DESC
    
    // 金额过滤
    private Double minAmount; // 最小金额
    private Double maxAmount; // 最大金额
    private String currencyType; // 货币类型：CNY, USD
    
    // 数据源选择
    private String dataSource; // 数据源：daily_database, monthly_database, external_raw_data
    
    // 统计类型
    private String statisticalType; // 统计类型：amount, quantity, count
    
    // 预测参数
    private Integer predictionMonths; // 预测月数
    private Double confidenceInterval; // 置信区间
    private Integer historicalDataMonths; // 历史数据月数（24或36）
    
    // 异动监测参数
    private Double anomalyThreshold; // 异动阈值
    private Boolean enableAlert; // 是否启用告警
    
    // 钻取分析参数
    private String drillDimension; // 钻取维度
    private String drillValue; // 钻取值
    
    // Getters and Setters
    public String getQueryType() {
        return queryType;
    }
    
    public void setQueryType(String queryType) {
        this.queryType = queryType;
    }
    
    public String getImportExportType() {
        return importExportType;
    }
    
    public void setImportExportType(String importExportType) {
        this.importExportType = importExportType;
    }
    
    public String getCustomsArea() {
        return customsArea;
    }
    
    public void setCustomsArea(String customsArea) {
        this.customsArea = customsArea;
    }
    
    public String getDeclareNo() {
        return declareNo;
    }
    
    public void setDeclareNo(String declareNo) {
        this.declareNo = declareNo;
    }
    
    public String getItemNo() {
        return itemNo;
    }
    
    public void setItemNo(String itemNo) {
        this.itemNo = itemNo;
    }
    
    public String getHsCode() {
        return hsCode;
    }
    
    public void setHsCode(String hsCode) {
        this.hsCode = hsCode;
    }
    
    public String getGoodsName() {
        return goodsName;
    }
    
    public void setGoodsName(String goodsName) {
        this.goodsName = goodsName;
    }
    
    public String getEnterpriseName() {
        return enterpriseName;
    }
    
    public void setEnterpriseName(String enterpriseName) {
        this.enterpriseName = enterpriseName;
    }
    
    public String getEnterpriseCode() {
        return enterpriseCode;
    }
    
    public void setEnterpriseCode(String enterpriseCode) {
        this.enterpriseCode = enterpriseCode;
    }
    
    public String getEnterpriseCreditLevel() {
        return enterpriseCreditLevel;
    }
    
    public void setEnterpriseCreditLevel(String enterpriseCreditLevel) {
        this.enterpriseCreditLevel = enterpriseCreditLevel;
    }
    
    public String getCountryCode() {
        return countryCode;
    }
    
    public void setCountryCode(String countryCode) {
        this.countryCode = countryCode;
    }
    
    public String getCountryName() {
        return countryName;
    }
    
    public void setCountryName(String countryName) {
        this.countryName = countryName;
    }
    
    public String getRegionCode() {
        return regionCode;
    }
    
    public void setRegionCode(String regionCode) {
        this.regionCode = regionCode;
    }
    
    public String getRegionName() {
        return regionName;
    }
    
    public void setRegionName(String regionName) {
        this.regionName = regionName;
    }
    
    public String getPortCode() {
        return portCode;
    }
    
    public void setPortCode(String portCode) {
        this.portCode = portCode;
    }
    
    public String getPortName() {
        return portName;
    }
    
    public void setPortName(String portName) {
        this.portName = portName;
    }
    
    public String getTradeMethod() {
        return tradeMethod;
    }
    
    public void setTradeMethod(String tradeMethod) {
        this.tradeMethod = tradeMethod;
    }
    
    public String getTransportMode() {
        return transportMode;
    }
    
    public void setTransportMode(String transportMode) {
        this.transportMode = transportMode;
    }
    
    public Date getStartDate() {
        return startDate;
    }
    
    public void setStartDate(Date startDate) {
        this.startDate = startDate;
    }
    
    public Date getEndDate() {
        return endDate;
    }
    
    public void setEndDate(Date endDate) {
        this.endDate = endDate;
    }
    
    public Date getCustomsClearanceStartDate() {
        return customsClearanceStartDate;
    }
    
    public void setCustomsClearanceStartDate(Date customsClearanceStartDate) {
        this.customsClearanceStartDate = customsClearanceStartDate;
    }
    
    public Date getCustomsClearanceEndDate() {
        return customsClearanceEndDate;
    }
    
    public void setCustomsClearanceEndDate(Date customsClearanceEndDate) {
        this.customsClearanceEndDate = customsClearanceEndDate;
    }
    
    public List<String> getGroupDimensions() {
        return groupDimensions;
    }
    
    public void setGroupDimensions(List<String> groupDimensions) {
        this.groupDimensions = groupDimensions;
    }
    
    public List<String> getOutputFields() {
        return outputFields;
    }
    
    public void setOutputFields(List<String> outputFields) {
        this.outputFields = outputFields;
    }
    
    public Integer getPageNum() {
        return pageNum;
    }
    
    public void setPageNum(Integer pageNum) {
        this.pageNum = pageNum;
    }
    
    public Integer getPageSize() {
        return pageSize;
    }
    
    public void setPageSize(Integer pageSize) {
        this.pageSize = pageSize;
    }
    
    public String getSortField() {
        return sortField;
    }
    
    public void setSortField(String sortField) {
        this.sortField = sortField;
    }
    
    public String getSortOrder() {
        return sortOrder;
    }
    
    public void setSortOrder(String sortOrder) {
        this.sortOrder = sortOrder;
    }
    
    public Double getMinAmount() {
        return minAmount;
    }
    
    public void setMinAmount(Double minAmount) {
        this.minAmount = minAmount;
    }
    
    public Double getMaxAmount() {
        return maxAmount;
    }
    
    public void setMaxAmount(Double maxAmount) {
        this.maxAmount = maxAmount;
    }
    
    public String getCurrencyType() {
        return currencyType;
    }
    
    public void setCurrencyType(String currencyType) {
        this.currencyType = currencyType;
    }
    
    public String getDataSource() {
        return dataSource;
    }
    
    public void setDataSource(String dataSource) {
        this.dataSource = dataSource;
    }
    
    public String getStatisticalType() {
        return statisticalType;
    }
    
    public void setStatisticalType(String statisticalType) {
        this.statisticalType = statisticalType;
    }
    
    public Integer getPredictionMonths() {
        return predictionMonths;
    }
    
    public void setPredictionMonths(Integer predictionMonths) {
        this.predictionMonths = predictionMonths;
    }
    
    public Double getConfidenceInterval() {
        return confidenceInterval;
    }
    
    public void setConfidenceInterval(Double confidenceInterval) {
        this.confidenceInterval = confidenceInterval;
    }
    
    public Integer getHistoricalDataMonths() {
        return historicalDataMonths;
    }
    
    public void setHistoricalDataMonths(Integer historicalDataMonths) {
        this.historicalDataMonths = historicalDataMonths;
    }
    
    public Double getAnomalyThreshold() {
        return anomalyThreshold;
    }
    
    public void setAnomalyThreshold(Double anomalyThreshold) {
        this.anomalyThreshold = anomalyThreshold;
    }
    
    public Boolean getEnableAlert() {
        return enableAlert;
    }
    
    public void setEnableAlert(Boolean enableAlert) {
        this.enableAlert = enableAlert;
    }
    
    public String getDrillDimension() {
        return drillDimension;
    }
    
    public void setDrillDimension(String drillDimension) {
        this.drillDimension = drillDimension;
    }
    
    public String getDrillValue() {
        return drillValue;
    }
    
    public void setDrillValue(String drillValue) {
        this.drillValue = drillValue;
    }
} 

